﻿/*******************************************************
* Copyright (c) 2018-2088, By XuXiang all rights reserved.
*
* FileName: MainBase.h
* Summary: 程序入口管理的基类。
*
* Author: XuXiang
* Date: 2024-04-10 14:24
*******************************************************/

#ifndef __MainBase_h__
#define __MainBase_h__

#include "../Macro.h"
#include <string>
using namespace std;

namespace Competition
{
	class NetManagerBase;
	class StorageManager;
	class ServerBase;

	//创建ServerXXX和NetManagerXXXX
	class MainBase
	{
	public:
		MainBase();
		virtual ~MainBase();

		//解析服务器ID
		static int ParseServerID(int argc, char *argv[]);

		//启动
		int Run(int sid);

		//获取服务类型
		inline int GetType()const { return m_ServerID / 1000; }

		//获取网络管理
		inline NetManagerBase* GetNetManager()const { return m_pNetManager; }

		//获取存储管理
		inline StorageManager* GetStorageManager()const { return m_pStorageManager; }

		//获取服务对象
		inline ServerBase* GetServer()const { return m_pServer; }

		//获取当前Main对象
		static inline MainBase* GetCurMain() { return pCurMain; }

	protected:
		//创建网络管理
		virtual NetManagerBase* OnCreateNetManager() = 0;

		//创建服务模块
		virtual ServerBase* OnCreateServer() = 0;

	private:

		//当前Main对象
		static MainBase *pCurMain;

		//退出命令
		static const string COMMAND_QUIT;

		//服务器类型
		int m_ServerID;

		//网络管理
		NetManagerBase *m_pNetManager;

		//存储管理
		StorageManager* m_pStorageManager;

		//服务对象
		ServerBase *m_pServer;
	};
}

#endif
